package feed.dao;
import com.toedter.calendar.JDateChooser;
import feed.entity.Movimiento;
import feed.conexion.DataBaseInstance;
import static feed.conexion.DataBaseInstance.closeConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class MovimientoDao {
    
    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    
    public void save(Movimiento movimiento) {
        PreparedStatement saveMovimiento;
        try {
            saveMovimiento = getConnection().prepareStatement(
                    "INSERT INTO APP.movimiento VALUES (?,?,?)");
            saveMovimiento.setString(1, movimiento.getFecha());
            saveMovimiento.setString(2, movimiento.getDescripcion());
            saveMovimiento.setInt(3, movimiento.getIdtipo());
            saveMovimiento.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la operación!\n\n"+se, "Error de datos", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    public void update(Movimiento movimiento) {
        PreparedStatement saveMovimiento;
        try {
            saveMovimiento = getConnection().prepareStatement(
                 "UPDATE APP.movimiento SET fecha = ?, descripcion = ? WHERE  id = ?");
            saveMovimiento.setString(1, movimiento.getFecha());
            saveMovimiento.setString(2, movimiento.getDescripcion());
            saveMovimiento.setInt(3, movimiento.getIdtipo());
            saveMovimiento.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la operación!\n\n"+se, "Error de datos", JOptionPane.ERROR_MESSAGE);
        }
    }

    public void delete(Movimiento movimiento) {
        PreparedStatement delMovimiento;
        try {
            delMovimiento = getConnection().prepareStatement(
                    "DELETE FROM APP.movimiento WHERE id = ?");
            delMovimiento.setInt(1, movimiento.getId());
            delMovimiento.executeUpdate();
            closeConnection();
        } catch (SQLException se) {
            JOptionPane.showMessageDialog(null, "No se ha podido realizar la operación!\n\n"+se, "Error de datos", JOptionPane.ERROR_MESSAGE);
        }
    }
      public void IngresarM(int tipo,String fecha,String descrip){
       try {            
            PreparedStatement pstm = getConnection().prepareStatement("insert into " + 
                    "APP.movimiento(idtipo,fecha,descripcion) " +
                    " values(?,?,?)");
            pstm.setInt(1, tipo);
            pstm.setString(2, fecha);
            pstm.setString(3, descrip);
            pstm.execute();
            pstm.close();            
         }catch(SQLException e){
         System.out.println(e);
      }
   }
    protected void closeConnection() {
        DataBaseInstance.closeConnection();
    }
public int findultimaid() {
        ResultSet result = null;
        Movimiento movimiento = null;

        try {
            // Componemos la sentencia SQL para obtener los productos.
            String query = "select max(ID) from APP.MOVIMIENTO";

            // Ejecutamos la query y obtenemos el resultado.
            PreparedStatement stmt = getConnection().prepareStatement(query);
            
            result = stmt.executeQuery();

            // Vemos si no ha devuelto ningun resultado.
            if (!result.next()) {
                throw new SQLException();
            }

            // Construimos una VO para el producto.
            movimiento = new Movimiento();
            movimiento.setId(result.getInt("1"));
            result.close();
            stmt.close();
            closeConnection();
            System.err.println("Se ha logrado accesar."+movimiento.getId());
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
        }

        return movimiento.getId();
    }
//     public Object [][] getDatos(){
//        int posid = 0;
//        
//        try{
//            PreparedStatement pstm = getConnection().prepareStatement(
//                    "SELECT count(1) as total FROM app.detallemovimiento where id = >");
//           
//            ResultSet res = pstm.executeQuery();
//            res.next();
//            posid = res.getInt("total");
//            res.close();
//            }catch(SQLException e){
//                JOptionPane.showMessageDialog(null, e);
//        }
//        Object[][] data = new String[posid][3];
//        try{
//            PreparedStatement pstm = getConnection().prepareStatement("SELECT id,nombre,descripcion FROM app.tipocuenta");
//            ResultSet res = pstm.executeQuery();
//            int increment = 0;
//            while(res.next()){ 
//                String estId = Integer.toString(res.getInt("id"));
//                String estNombre = res.getString("nombre");
//                String estDescripcion = res.getString("descripcion");
//                data[increment][0] = estId;
//                data[increment][1] = estNombre;
//                data[increment][2] = estDescripcion;
//                increment++;
//            }
//            res.close();
//            }catch(SQLException e){
//                JOptionPane.showMessageDialog(null, e);
//        }
//        return data;
//    }

    public void IngresarM(JDateChooser fecha, int tipo, String comentario) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    
}
